(deftemplate culoarePantaloni (slot persoana) (slot culoare))
(deftemplate pozitie (slot persoana) (slot x))

(assert (culoarePantaloni (persoana Mutu) (culoare albastru)))
(assert (culoarePantaloni (persoana Mutu) (culoare portocaliu)))
(assert (culoarePantaloni (persoana Mutu) (culoare verde)))
(assert (culoarePantaloni (persoana Mutu) (culoare rosu)))

(assert (culoarePantaloni (persoana Radoi) (culoare albastru)))
(assert (culoarePantaloni (persoana Radoi) (culoare portocaliu)))
(assert (culoarePantaloni (persoana Radoi) (culoare verde)))
(assert (culoarePantaloni (persoana Radoi) (culoare rosu)))

(assert (culoarePantaloni (persoana Nicolita) (culoare albastru)))
(assert (culoarePantaloni (persoana Nicolita) (culoare portocaliu)))
(assert (culoarePantaloni (persoana Nicolita) (culoare verde)))
(assert (culoarePantaloni (persoana Nicolita) (culoare rosu)))

(assert (culoarePantaloni (persoana Chivu) (culoare albastru)))
(assert (culoarePantaloni (persoana Chivu) (culoare portocaliu)))
(assert (culoarePantaloni (persoana Chivu) (culoare verde)))
(assert (culoarePantaloni (persoana Chivu) (culoare rosu)))

(assert (pozitie (persoana Mutu) (x 1)))
(assert (pozitie (persoana Mutu) (x 2)))
(assert (pozitie (persoana Mutu) (x 3)))
(assert (pozitie (persoana Mutu) (x 4)))

(assert (pozitie (persoana Radoi) (x 1)))
(assert (pozitie (persoana Radoi) (x 2)))
(assert (pozitie (persoana Radoi) (x 3)))
(assert (pozitie (persoana Radoi) (x 4)))

(assert (pozitie (persoana Nicolita) (x 1)))
(assert (pozitie (persoana Nicolita) (x 2)))
(assert (pozitie (persoana Nicolita) (x 3)))
(assert (pozitie (persoana Nicolita) (x 4)))

(assert (pozitie (persoana Chivu) (x 1)))
(assert (pozitie (persoana Chivu) (x 2)))
(assert (pozitie (persoana Chivu) (x 3)))
(assert (pozitie (persoana Chivu) (x 4)))

(defrule rezolvare
(pozitie (persoana Mutu)(x ?p1))
(culoarePantaloni (persoana Mutu)(culoare ?c1))
(pozitie (persoana ?n & ~Mutu)(x ?p & : (eq ?p (+ ?p1 1))))
(culoarePantaloni (persoana ?n & ~Mutu)(culoare albastru & ~?c1))
(pozitie (persoana Radoi)(x ?p2 & 2 & ~?p1))
(culoarePantaloni (persoana Radoi)(culoare ?c2 & ~?c1))
(pozitie (persoana Nicolita & ~?n)(x ?p3 & ~?p1 & ~?p & ~?p2 ))
(culoarePantaloni (persoana Nicolita & ~?n)(culoare ?c3 & verde & ~?c1 & ~?c2))
(pozitie (persoana Chivu & ?n)(x ?p4 & ~1 & ~4 & ~?p1 & ~?p2 & ~?p3))
(culoarePantaloni (persoana Chivu)(culoare ?c4 & ~portocaliu & ~?c1 & ~?c2 & ~?c3))
=>
(printout t crlf)
(printout t "Mutu pozitie = " ?p1 " culoare= " ?c1 crlf)
(printout t "Radoi pozitie = " ?p2 " culoare= " ?c2 crlf)
(printout t "Chivu pozitie = " ?p4 " culoare= " ?c4 crlf)
(printout t "Nicolita pozitie = " ?p3 " culoare= " ?c3 crlf crlf)
)
(run)

;(assert (culoarePantaloni (persoana Mutu) (culoare violet)))

;(facts)

;(defrule eliminaMutu
 ;   ?idr<-(culoarePantaloni (persoana Mutu) (culoare violet))
  ;  =>
   ; (modify ?idr (culoare negru))
    ;(retract ?idr))
;(run)
;(facts)
